package tp.model;

import javax.xml.bind.annotation.XmlRootElement;

/**
 * Une position sur la carte, déterminée par sa latitude et sa longitude.
 */
@XmlRootElement
public class Position {
	
	// ATTRIBUTS

	// Les coordonnées de cette position
	private double latitude,longitude;
	
	// CONSTRUCTEURS
	
	/**
	 * Une position déterminée par les coordonnées passées en paramètres.
	 * Aucune vérification sur la validité de ces coordonnées n'est réalisée.
	 * @param latitude la latitude de cette position
	 * @param longitude la longitude de cette position
	 */
	public Position(double latitude, double longitude) {
		this.latitude = latitude;
		this.longitude = longitude;
	}

	/**
	 * Une position sans coordonnées.
	 * Par défaut, celles-ci sont placées à 0,0 (côtes ouest-africaines).
	 */
	public Position() {	}
	
	// REQUETES
	
	/**
	 * @return la latitude de cette position.
	 */
	public double getLatitude() {
		return latitude;
	}
	
	/**
	 * @return la longitude de cette position.
	 */
	public double getLongitude() {
		return longitude;
	}
	
	/**
	 * @param o l'objet à comparer à cette position.
	 * @return true si les deux objets sont équivalents, i.e. si o est une position de mêmes coordonnées.
	 */
	public boolean equals(Object o) {
		boolean result = false;
		if (o instanceof Position) {
			Position otherPosition = (Position) o;
			result = otherPosition.latitude == this.latitude &&
					otherPosition.longitude == this.longitude;
		}
		return result;
	}
	
	/**
	 * @return une chaine décrivant cette position.
	 */
	public String toString(){
		final StringBuffer buffer = new StringBuffer();
		buffer.append("(").append(latitude).append(", ").append(longitude).append(")");
		return buffer.toString();
	}
	
	// COMMANDES
	
	/**
	 * Place (sans vérification) la latitude de cette position.
	 * @param latitude la latitude à placer
	 */
	public void setLatitude(double latitude) {
		this.latitude = latitude;
	}
	
	/**
	 * Place (sans vérification) la longitude de cette position.
	 * @param longitude la longitude à placer
	 */
	public void setLongitude(double longitude) {
		this.longitude = longitude;
	}
	
}
